home *** CD-ROM | disk | FTP | other *** search
- Program PackMud;
- Uses Dos,Header,Misc;
-
- Var Inp : File of ObjRecord;
- Dat : File;
- Out : File;
- Rec : ObjRecord;
-
- MudName : ComStr;
- DatSize : LongInt;
- Nr : Word;
- Txt : TextRecord;
-
- Procedure CopyLong(Var L : LongRec);
- Var F : File;
- RR : Word;
- Begin
- If (Integer(L.Length)=-1) Or (L.Start>DatSize)
- Then Begin
- FillChar(L,SizeOf(L),#00);
- Exit;
- End;
-
- Assign(F,MudName+'.ODT');
- Reset(F,1);
- Seek(F,L.Start);
- BlockRead(F,Txt,L.Length,RR);
- Close(F);
- If RR<>L.Length
- Then Begin
- FillChar(L,SizeOf(L),#00);
- Exit;
- End;
-
- Assign(F,Mudname+'.DAT');
- Reset(F,1);
- If IoResult<>0
- Then Rewrite(F,1);
- Seek(F,FileSize(F));
- L.Start:=FilePos(F);
- BlockWrite(F,Txt,RR,RR);
- Close(F);
- If RR<>L.Length
- Then Begin
- FillChar(L,SizeOf(L),#00);
- Exit;
- End;
- End;
-
-
-
- Begin
- MudName:=ParamStr(1);
-
- Assign(Inp,MudName+'.IDX');
- Reset(Inp);
- If IoResult<>0
- Then Halt;
-
- Assign(Out,MudName+'.DAT');
- Rename(Out,MudName+'.ODT');
- Reset(Out,1);
- DatSize:=FileSize(Out);
- Close(Out);
- If IoResult<>0
- Then Begin
- Close(Inp);
- Halt;
- End;
-
- Nr:=0;
- While Not Eof(Inp) Do
- Begin
- Read(Inp,Rec);
- Inc(Nr);
- With rec Do
- Begin
- Write(#13,Rec.Name);
- If Success.Length >0 Then CopyLong(Success) Else Success.Start :=0;
- If Fail.Length >0 Then CopyLong(Fail) Else Fail.Start :=0;
- If OSuccess.Length >0 Then CopyLong(OSuccess) Else Osuccess.Start:=0;
- If OFail.Length >0 Then CopyLong(OFail) Else OFail.Start :=0;
- If Desc.Length >0 Then CopyLong(Desc) Else Desc.Start :=0;
- If Finger.Length >0 Then CopyLong(Finger) Else Finger.Start :=0;
- If Macro.Length >0 Then CopyLong(Macro) Else Macro.Start :=0;
- End;
-
- Seek(Inp,Nr-1);
- Write(Inp,Rec);
- End;
- WriteLn;
- Close(Inp);
- End.